/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package AccesoDatos.DAOSocket;

import AccesoDatos.IDAO.IDAOUsuario;
import Excepciones.NoConexionException;
import ObjetoDominio.ArchivoXML;
import ObjetoDominio.Servidor;
import ObjetoDominio.Usuario;
import Proxy.ProxyUsuario;
import Session.Session;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ConnectException;
import java.net.SocketException;

/**
 *Clase que realiza las acciones sobre los datos de usuario por via socket
 * @author guzmle
 */
public class DAOUsuarioSocket implements IDAOUsuario{

    Servidor _servidor;
    
    public DAOUsuarioSocket(Servidor servidor) {
        _servidor = servidor;
    }

    /**
     * Metodo que valida las credenciales del usuario dentro del servidor
     * por via socket
     * @param usuario datos del usuario para validar
     * @return 
     */
    @Override
    public boolean ValidarUsuario(Usuario usuario) throws NoConexionException {
        try {
            
            _servidor = Session.getServidorConectado();
            _servidor.AbrirConexion();
            OutputStream flujoSalida = _servidor.getViaComunicacion().getOutputStream();
            InputStream flujoEntrada = _servidor.getViaComunicacion().getInputStream();
            DataOutputStream salida = new DataOutputStream( flujoSalida );
            DataInputStream entrada = new DataInputStream(flujoEntrada);
            salida.writeUTF(ArchivoXML.CrearMensaje("validar"));
            salida.writeUTF(ProxyUsuario.TransformarUsuarioXml(usuario));
            String mensaje = entrada.readUTF();
            if(ArchivoXML.ObtenerMensaje(mensaje).equals("true")){
                Session.setSesion(true);
                return true;
            }
            else
                return false;
        }catch(ConnectException e){
            _servidor.setActivo(false);
            throw new NoConexionException();
        }catch(NoConexionException e){
            _servidor.setActivo(false);
            throw new NoConexionException();
        }catch(Exception e){
            System.out.println(e);
            return false;
        }
        
    }

    @Override
    public void VerificarSession() throws NoConexionException{
        try {
            _servidor = Session.getServidorConectado();
            _servidor.AbrirConexionSecundaria();
            OutputStream flujoSalida = _servidor.getViaComunicacionSecundario().getOutputStream();
            InputStream flujoEntrada = _servidor.getViaComunicacionSecundario().getInputStream();
            DataOutputStream salida = new DataOutputStream( flujoSalida );
            DataInputStream entrada = new DataInputStream(flujoEntrada);
            salida.writeUTF(ArchivoXML.CrearMensaje("verificar"));
            entrada.readUTF();
            Session.setSesion(true);
        }catch(ConnectException e){
            _servidor.setActivo(false);
            throw new NoConexionException();
        }catch(NoConexionException e){
            _servidor.setActivo(false);
            throw new NoConexionException();
        }catch(SocketException e){
            _servidor.setActivo(false);
            throw new NoConexionException();
        }catch(Exception e){
            System.out.println("aqui " + e);
        }
    }

      
    
}
